// 导入 axios
import axios from 'axios'
// 导入token工具函数
import { removeToken, getToken } from '../utils/token.js'
// 导入提示框插件
import { Toast } from 'vant'
// 导入vuex
import store from '../store/index.js'
// 导入路由
import router from '../router/index.js'
// 创建一个 axios 对象
const request = axios.create({
  // 设置基地址
  baseURL: process.env.VUE_APP_URL
})
// 给 axios 设置拦截器
// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 判断当前请求是否需要携带token
    if (config.needToken) {
      // 需要则设置token请求头
      const token = getToken()
      if (token) {
        // 统一设置请求头
        config.headers.authorization = 'Bearer ' + token
      }
    }
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    const code = response.data.code
    // 根据响应状态码,处理响应结果
    if (code === 200) {
      // 请求成功
      // console.log(code)
      return response
    } else if (code === 401 || code === 403) {
      // 提示信息错误
      Toast.fail('登录异常')
      // 删除token
      removeToken()
      // 修改登录状态为false
      store.commit('setIsLogin', false)
      // 跳转地址
      router.push('/login')
      return Promise.reject(new Error(response.data.message))
    } else {
      // 提示异常信息
      Toast.fail(response.data.message)
      return Promise.reject(new Error(response.data.message))
    }
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 暴露 axios 对象
export default request
